package us.proyecto.canarios.domain;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

/**
 * Clase que mapea la tabla USUARIO
 * @author Juan Antonio Mena Sánchez
 *
 */
@Entity
@Table(name = "USUARIO")
public class Usuario {

	private int idUsuario;
	private String nombre;
	private String pass;
	private Boolean administrador;
	private Boolean esAsociacion;
	private Boolean esCriador;
	private Boolean esJuez;
	private Criador criador;
	private Asociacion asociacion;
	private Juez juez;
	private Boolean pendiente;

	public Usuario() {
		this.administrador = false;
		this.esAsociacion = false;
		this.esCriador = false;
		this.esJuez = false;
	}

	/**
	 * Getter de idUsuario
	 * @return idUsuario int
	 */
	@Id
    @SequenceGenerator(name = "usuarioId", sequenceName = "CAN_USUARIO_SEQ", initialValue = 1, allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "usuarioId")
    @Column(name = "ID_USUARIO", nullable = false, precision = 8, scale = 0)
	public int getIdUsuario() {
		return idUsuario;
	}

	/**
	 * Setter de idUsuario
	 * @param idUsuario int
	 */
	public void setIdUsuario(int idUsuario) {
		this.idUsuario = idUsuario;
	}

	/**
	 * Getter nombre de usuario
	 * @return usuario String
	 */
	@Column(name="NOMBRE")
	public String getNombre() {
		return nombre;
	}

	/**
	 * Setter de nombre de usuario
	 * @param nombre String
	 */
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	/**
	 * Getter de pass
	 * @return pass String
	 */
	@Column(name="PASS")
	public String getPass() {
		return pass;
	}

	/**
	 * Setter de pass
	 * @param pass String
	 */
	public void setPass(String pass) {
		this.pass = pass;
	}

	/**
	 * Getter de administrador
	 * @return administrador boolean
	 */
	@Column(name="ADMINISTRADOR")
	public Boolean getAdministrador() {
		return administrador;
	}

	/**
	 * Setter de administrador
	 * @param administrador boolean
	 */
	public void setAdministrador(Boolean administrador) {
		this.administrador = administrador;
	}

	/**
	 * Getter de asociacion
	 * @return asociacion boolean
	 */
	@Column(name="ASOCIACION")
	public Boolean getEsAsociacion() {
		return esAsociacion;
	}

	/**
	 * Setter de asociacion
	 * @param asociacion boolean
	 */
	public void setEsAsociacion(Boolean asociacion) {
		this.esAsociacion = asociacion;
	}

	/**
	 * Getter de criador
	 * @return criador boolean
	 */
	@Column(name="CRIADOR")
	public Boolean getEsCriador() {
		return esCriador;
	}

	/**
	 * Setter de criador
	 * @param criador boolean
	 */
	public void setEsCriador(Boolean criador) {
		this.esCriador = criador;
	}


	/**
	 * Getter de criador
	 * @return criador Criador
	 */
	@OneToOne(fetch=FetchType.LAZY, cascade = CascadeType.ALL)
	@JoinColumn(name = "FK_CRIADOR")
	public Criador getCriador() {
		return criador;
	}

	/**
	 * Setter de criador
	 * @param criador Criador
	 */
	public void setCriador(Criador criador) {
		this.criador = criador;
	}

	/**
	 * @return the esJuez
	 */
	@Column(name = "JUEZ")
	public Boolean getEsJuez() {
		return esJuez;
	}

	/**
	 * @param esJuez the esJuez to set
	 */
	public void setEsJuez(Boolean esJuez) {
		this.esJuez = esJuez;
	}

	/**
	 * @return the asociacion
	 */
	@OneToOne(fetch=FetchType.LAZY, cascade = CascadeType.ALL)
	@JoinColumn(name = "FK_ASOCIACION")
	public Asociacion getAsociacion() {
		return asociacion;
	}

	/**
	 * @param asociacion the asociacion to set
	 */
	public void setAsociacion(Asociacion asociacion) {
		this.asociacion = asociacion;
	}

	/**
	 * @return the juez
	 */
	@OneToOne(fetch=FetchType.LAZY)
	@JoinColumn(name = "FK_JUEZ")
	public Juez getJuez() {
		return juez;
	}

	/**
	 * @param juez the juez to set
	 */
	public void setJuez(Juez juez) {
		this.juez = juez;
	}

	/**
	 * @return the pendiente
	 */
	@Column(name="PENDIENTE")
	public Boolean getPendiente() {
		return pendiente;
	}

	/**
	 * @param pendiente the pendiente to set
	 */
	public void setPendiente(Boolean pendiente) {
		this.pendiente = pendiente;
	}





}
